package cn.hexcloud.dga.common.util;

import org.antlr.runtime.tree.Tree;
import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker;
import org.apache.hadoop.hive.ql.lib.Dispatcher;
import org.apache.hadoop.hive.ql.parse.ASTNode;
import org.apache.hadoop.hive.ql.parse.ParseDriver;

import java.util.Collections;

public class SqlParser {
    /**
     * @param dispatcher 自定义节点处理器
     * @param sql 待分析sql
     */
    public static void sqlParse(String sql,Dispatcher dispatcher){
        try {
            // 解析 hive sql
            // 创建解析引擎
            ParseDriver parseDriver = new ParseDriver();
            // 执行解析，获得根节点
            ASTNode ast = parseDriver.parse(sql);
            // 找到查询的根节点下的TOK_QUERY节点，视为有效节点
            ASTNode child = (ASTNode) ast.getChild(0);
            // 把节点处理器注入一个图形遍历器 使用自定义处理器遍历抽象语法树
            DefaultGraphWalker defaultGraphWalker = new DefaultGraphWalker(dispatcher);
            // 用遍历器遍历整个语法树
            defaultGraphWalker.startWalking(Collections.singletonList(ast),null);
        } catch (Exception e){
            throw new RuntimeException(e);
        }

    }
}
